package pos.domain;

import java.util.*;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import java.io.Serializable;
import pos.client.dac.dao.OperazioneFinanziariaDAO;
import pos.client.dac.dao.OperazioneFinanziariaDAOAsync;
import pos.server.dac.exceptions.EccezioneCRUD;

public class OperazioneFinanziaria implements Serializable{

    private String categoria;
    private String nome;
    private Double somma;
    private long data;
    private int id_of;
    private TipoLinkU_FO link;

    public OperazioneFinanziaria() {
    }
    //transient private OperazioneFinanziariaDAOAsync dao = (OperazioneFinanziariaDAOAsync) GWT.create(OperazioneFinanziariaDAO.class);
    public OperazioneFinanziaria(String nome, String categoria, double somma, long data) {
        this.categoria = categoria;
        this.nome = nome;
        this.somma = somma;
        this.data = data;
    }

  

    //gestione delle associazione "F-U"
    public int quantiUtenti() {
        if (link == null) {
            return 0;
        } else {
            return 1;
        }
    }

    public void inserisciLinkFU(TipoLinkU_FO t) {
         
        if (t != null && t.getOperazioneFinanziaria() == this) {
          
            ManagerFU.inserisci(t);
        }
    }

    public void eliminaLinkFU(TipoLinkU_FO t) {
        if (t != null && t.getOperazioneFinanziaria() == this) {
            ManagerFU.elimina(t);
        }
    }

    public TipoLinkU_FO getLinkFU() throws EccezioneCardMinMax {
        if (link == null) {
            throw new EccezioneCardMinMax("Cardinalita� minima violata");
        } else {
            return link;
        }
    }

    public void inserisciPerManagerFU(ManagerFU a) {
        if (a != null) {
            link = a.getLink();
        }
    }

    public void eliminaPerManagerFU(ManagerFU a) {
        if (a != null) {
            link = null;
        }
    }

    //funzioni set&&get
    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setSomma(double somma) {
        this.somma = somma;
    }

    public void setData(long data) {
        this.data = data;
    }

    public void setId_of(int id) {
        this.id_of = id;
    }

    public String getCategoria() {
        return categoria;
    }

    public String getNome() {
        return nome;
    }

    public double getSomma() {
        return somma;
    }

    public long getData() {
        return data;
    }

    public int getId_of() {
        return id_of;
    }

    /*gestione BD
      public void leggiDatidaDB(AsyncCallback<Void> callback) throws
      EccezioneCRUD {dao.leggiDatidaDB (this, callback);}
     
      public void inserisciDatisuDB(AsyncCallback<Void> callback) throws
      EccezioneCRUD { 
           Window.alert("sto in Operazione Finanziaria");
          dao.inserisciDatisuDB(this, callback);}
     
      public void aggiornaDatisuDB(AsyncCallback<Void> callback) throws
      EccezioneCRUD { dao.aggiornaDatisuDB (this, callback);}
     
      public void cancellaDatidaDB(AsyncCallback<Void> callback) throws
      EccezioneCRUD { dao.cancellaDatidaDB (this, callback);}
     */
    @Override
    public String toString() {
        return "Nome: " + nome + "categoria: " + categoria + ", somma: " + Double.toString(somma) + " , data: " + data;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final OperazioneFinanziaria other = (OperazioneFinanziaria) obj;
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 59 * hash + (this.categoria != null ? this.categoria.hashCode() : 0);
        hash = 59 * hash + (this.nome != null ? this.nome.hashCode() : 0);
        hash = 59 * hash + (this.somma != null ? this.somma.hashCode() : 0);
        return hash;
    }
    
    
}
